package com.cn.roowoo.utils.singleton;
/**
 * 单例模式：
 * 实现方式四：使用枚举实现单例
 * 
 * 原理：在枚举中我们明确了构造方法限制为私有，在访问枚举实例时会执行构造方法，同时每个枚举实例都是static
 *     final类型的，也就表明只能被实例化一次。在调用构造方法时，我们的单例被实例化。 也就是说，因为enum中的
 *     实例被保证只会被实例化一次，所以我们的INSTANCE也被保证实例化一次
 * 
 * 问题：枚举实现单例，不推荐在Android平台使用，因为内存消耗会其他方式多一些，Android官方也不推荐枚举，
 *     Android平台推荐  双重校验  或者  静态内部类  单例，现在的Android开发环境jdk一般都大于1.5了。所
 *     以volatile的问题不必担心。Java平台开发的Effective Java一书中推荐使用枚举实现单例，可以保
 *     证效率，而且还能解决反序列化创建新对象的问题。
 *
 */


/**
 * 需要创建的单例对象 源
 */
class SingletonByFourClass {
	public static void test() {
		System.out.println("这是单例模式的对象方法");
	}
	
}

/**
 * 枚举
 * 注：1.枚举中的每个实例都是 static final的，只能被实例化一次
 *    2.在访问枚举实例时会执行构造方法
 *    3.调用构造方法时，我们需要的单例被实例化，因为INSTANCE只被实例化一次，因此我们的单例也只被实例化一次
 * */
public enum SingletonByFour {

	INSTANCE;
	
	private SingletonByFourClass instance;
	
	SingletonByFour (){
		instance = new SingletonByFourClass();
	}

	public SingletonByFourClass getInstance(){
		return instance;
	}
	
}
